<?php
namespace App\Service;

use Illuminate\Support\Facades\DB;

class BaseService
{
    //基础服务

    protected $database = 'mysql'; //库名称
    protected $db; //表对象

    protected $dbAdmin = 'admin'; //管理员
    protected $dbAction = 'admin_action'; //后台菜单
    protected $dbUser = 'user'; //用户
    protected $dbYewu = 'yewu'; //业务临时表
    protected $dbCompany = 'company'; //企业
    protected $dbImg = 'image'; //图库
    protected $dbCate = 'category'; //业务分类
    protected $dbArea = 'area'; //地区联动
    protected $dbPay = 'pay'; //支付
    protected $dbPayNotice = 'pay_notice'; //支付通知
    protected $dbRefund = 'prefund'; //退款
    //原创案例
    protected $dbCase = 'case'; //原创案例导览
    protected $dbCaseLike = 'case_like'; //原创案例导览-点赞
    protected $dbCaseFollow = 'case_follow'; //原创案例导览-关注
    protected $dbCaseCollect = 'case_collect'; //原创案例导览-收藏
    protected $dbCaseForward = 'case_forward'; //原创案例导览-转发
    protected $dbCaseJubao = 'case_jubao'; //原创案例导览-举报
    protected $dbCaseOnline = 'case_online'; //原创案例导览-在线咨询
    protected $dbCaseReply = 'case_online_reply'; //原创案例导览-咨询回复
    protected $dbCaseXq = 'case_xq'; //原创案例需求
    protected $dbDesigner = 'designer'; //设计师
    protected $dbCasexqCollect = 'casexq_collect'; //右侧案例需求-收藏
    protected $dbCasexqForward = 'casexq_forward'; //右侧案例需求-分享
    protected $dbCasexqJubao = 'casexq_jubao'; //右侧案例需求-举报
    protected $dbCxOrder = 'cx_order'; //右侧案例需求-订单
    protected $dbCxoFile = 'cx_order_file'; //右侧案例需求-订单资料
    //设计商城
    protected $dbDesignCase = 'design_supply'; //设计商城-案例
    protected $dbDesignDemand = 'design_demand'; //设计商城-需求
    //设备商城
    protected $dbDevice = 'device'; //设备商城
    protected $dbDevicePas = 'device_pas'; //参数

    /**
     * 原创案例需求-状态
     * 1发布中，2进行中，3已完成
     */
    protected $casexqStatus = [
        1 => '新发布', '进行中', '已完成',
    ];
    /**
     * 原创案例需求-工作方式
     */
    protected $casexq_work_types = [
        1 => '全职', '兼职',
    ];
    /**
     * 原创案例需求-学历
     * 0无，1小学，2初中，3高中，4大专，5本科，6研究生，7博士
     */
    protected $casexq_edus = [
        '无', '小学', '初中', '高中', '大专', '本科', '研究生', '博士',
    ];

    /**
     * 原创案例需求订单状态
     * 1接单申请，2客户落选，3客户确认，4已支付合作中，5订单完成
     */
    protected $casexqOrderStatuss = [
        1 => '申请中待确认', '已落选', '已确认待支付', '已支付合作中', '已完成',
    ];

    /**
     * 分类列表
     * @param int $type 业务类型：1版权，2原创案例
     * @param int $pid 父级ID
     * @return array
     */
    public function cateOption($type, $pid = 0)
    {
        return $this->dbConn($this->dbCate)
            ->select('id', 'title', 'pid')
            ->where('type', $type)
            ->where('pid', $pid)
            ->get();
    }

    /**
     * 地区联动
     * @param int $pid 父级ID
     */
    public function areaOption($pid = 0)
    {
        return $this->dbConn($this->dbArea)->where('pid', $pid)->get();
    }

    /**
     * 查询列表
     * @param string $db 表名
     * @param array $w1s【参数名=>值】
     * @param array $w2s【参数名，操作符，值】
     * @param array $sels 字段数组（返回字段=>表字段）
     * @param array $sorts 排序数组（排序字段=>排序方式）
     */
    public function dbQueryList($db, $w1s = [], $w2s = [], $sels = [], $sorts = [])
    {
        $db = $this->dbConn($db);
        if (!empty($w1s)) {
            foreach ($w1s as $k => $v) {
                $db = $db->where($k, $v);
            }
        }
        if (!empty($w2s)) {
            foreach ($w2s as $v) {
                $db = $db->where($v['key'], $v['oper'], $v['val']);
            }
        }
        if (!empty($sorts)) {
            foreach ($sorts as $k => $v) {
                $db = $db->orderBy($k, $v);
            }
        }
        $lists = $db->get();
        return $this->listSelect($lists, $sels);
    }

    //列表指定字段转换
    public function listSelect($lists, $fields = [])
    {
        $arys = [];
        if (empty($fields)) {
            return $lists;
        }
        foreach ($lists as $v) {
            $v = (array) $v;
            $ary2s = [];
            foreach ($fields as $kk => $vv) {
                if (isset($v[$vv])) {
                    $ary2s[$kk] = $v[$vv];
                }
            }
            if (!empty($ary2s)) {
                $arys[] = $ary2s;
            }
        }
        return $arys;
    }

    /**
     * 查询一个
     * @param string $db 表名
     * @param array $iswheres【参数名=>值】
     * @param array $opers【0参数名，1操作符，2值】
     * @param array $sels 字段数组（返回字段=>表字段）
     */
    public function dbQueryOne($db, $w1s = [], $w2s = [], $sels = [])
    {
        $db = $this->dbConn($db);
        if (!empty($w1s)) {
            foreach ($w1s as $k => $v) {
                $db = $db->where($k, $v);
            }
        }
        if (!empty($w2s)) {
            foreach ($w2s as $v) {
                $db = $db->where($v[0], $v[1], $v[2]);
            }
        }
        $one = (array) $db->first();
        return $this->oneSelect($one, $sels);
    }

    //列表指定字段转换
    public function oneSelect($one, $fields = [])
    {
        if (empty($fields)) {
            return $one;
        }
        $arys = [];
        if (empty($one)) {
            return $arys;
        }
        foreach ($fields as $kk => $vv) {
            if (isset($one[$vv])) {
                $arys[$kk] = $one[$vv];
            }
        }
        return $arys;
    }

    /**
     * 插入一条
     * @param string $db 表名
     * @param array $pas 数据
     */
    public function dbInsertOne($db, $pas)
    {
        return $this->dbConn($db)->insertGetId($pas);
    }

    /**
     * 修改
     * @param string $db 表名
     * @param array $w1s【$key，$val】
     * @param array $pas 数据【$key，$val】
     */
    public function dbModify($db, $w1s, $pas)
    {
        $db = $this->dbConn($db);
        if (count($w1s)) {
            foreach ($w1s as $k => $v) {
                $db = $db->where($k, $v);
            }
        }
        return $db->update($pas);
    }

    //连接数据库
    public function dbConn($db)
    {
        return DB::connection($this->database)->table($db);
    }
}